﻿#define _CRT_SECURE_NO_WARNINGS 1
#include "BSTree.h"
int main()
{
	////测试样例一: 一般情况下
	//int a[] = { 8, 3, 1, 10, 6, 4, 7, 14, 13 };
	//bite::BSTree<int> b;
	//for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
	//	b.Insert(a[i]);
	//}
	////输出制作的二叉搜索树
	//cout << "二叉搜索树: ";
	//b.Inorder();
	//// 删除头节点的情况
	//b.Erase(1);
	//cout << "删除头节点: ";
	//b.Inorder();
	////删除中间节点时的情况
	//b.Erase(10);
	//cout << "删除中间节点: ";
	//b.Inorder();
	////删除尾节点时的情况
	//b.Erase(14);
	//cout << "删除尾节点: ";
	//b.Inorder();

	////测试样例二: 根节点没有左子树时的情况
	//int m[] = { 8, 10, 14, 13 };
	//bite::BSTree<int> n;
	//for (int i = 0; i < sizeof(m) / sizeof(int); i++) {
	//	n.Insert(m[i]);
	//}
	////输出制作的二叉搜索树
	//cout << "二叉搜索树: ";
	//n.Inorder();
	////删除头节点时的情况
	//n.Erase(8);
	//cout << "删除头节点: ";
	//n.Inorder();
	
	////测试样例三: 根节点没有右子树时的情况
	//int v[] = { 8,3,1,6,4,7 };
	//bite::BSTree<int> B;
	//for (int i = 0; i < sizeof(v) / sizeof(int); i++) {
	//	B.Insert(v[i]);
	//}
	////输出制作的二叉搜索树
	//cout << "二叉搜索树: ";
	//B.Inorder();
	////删除头节点时的情况
	//B.Erase(1);
	//cout << "删除头节点: ";
	//B.Inorder();

	//递归使用的调用样例
	int a[] = { 8, 3, 1, 10, 6, 4, 7, 14, 13 };
	bite::BSTree<int> b;
	for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
		b.InsertB(a[i]);
	}
	b.Inorder();
	cout << b.FindB(8) << "  " << b.FindB(13) << "  " << b.FindB(11) << endl;
	b.EraseB(10);
	b.Inorder();
	return 0;
}

//#include <iostream>
//using namespace std;
//class A
//{
//public:
//    void f()
//    {
//        printf("A\n");
//    }
//};
//
//class B : public A
//{
//public:
//    virtual void f()
//    {
//        printf("B\n");
//    }
//};
//int main()
//{
//    A* a = new B;
//    a->f();
//    delete a;
//    return 0;
//}